#include "uart_app.h"

#define BUUFER_SIZE 64

// 定义环形缓冲区和接收缓冲区
ringbuffer_t usart_rb;
uint8_t usart_read_buffer[BUUFER_SIZE];

// void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
// {
//   if (huart->Instance == USART1)
//   {
//     uart_rx_ticks = uwTick;
//     uart_rx_index++;
//     HAL_UART_Receive_IT(&huart1, &uart_rx_buffer[uart_rx_index], 1);
//   }
// }

/**
 * @brief UART DMA接收完成回调函数
 *        将接收到的数据写入环形缓冲区，并清空DMA缓冲区
 * @param huart UART句柄
 * @param Size 接收到的数据大小
 * @retval None
 */
// void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
// {
// //    printf("dma data:%s\r\n", uart_rx_dma_buffer);
//     // 如果环形缓冲区未满
//     if(!ringbuffer_is_full(&usart_rb))
//     {
//         // 将DMA缓冲区中的数据写入环形缓冲区
//         count++;
//         ringbuffer_write(&usart_rb, uart_rx_dma_buffer, Size);
//     }
//     // 清空DMA缓冲区
//     memset(uart_rx_dma_buffer, 0, sizeof(uart_rx_dma_buffer));
// }

/**
 * @brief  处理UART接收缓冲区中的数据。
 *         如果在100ms内没有接收到新的数据，将清空缓冲区。
 * @param  None
 * @retval None
 */
// 处理UART接收缓冲区中的数据
uint16_t receivedLength = 5;
void uart_proc(void)
{
    // // // 如果接收索引为0，说明没有数据需要处理，直接返回
    // // if(uart_rx_index == 0) return;

    // // // 如果从最后一次接收到数据到现在已经超过100ms
    // // if(uwTick - uart_rx_ticks > 100) // 100ms内没有收到新的数据
    // // {
    // //     printf("uart data: %s\n", uart_rx_buffer);

    // //     // 清空接收缓冲区，将接收索引置零
    // //     memset(uart_rx_buffer, 0, uart_rx_index);
    // //     uart_rx_index = 0;
        
    // //     // 将UART接收缓冲区指针重置为接收缓冲区的起始位置
    // //     huart1.pRxBuffPtr = uart_rx_buffer;
    // // }

    // // 如果环形缓冲区为空，直接返回
    // if(ringbuffer_is_empty(&usart_rb)) return;
    
    // // 从环形缓冲区读取数据到读取缓冲区
    // ringbuffer_read(&usart_rb, usart_read_buffer, usart_rb.itemCount);
    
	
	// if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] == '.' && usart_read_buffer[4] == '1')
	// 	printf("the K now is: %s\n","0.1");
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '2')
	// 	printf("the K now is: %s\n","0.2");                                                                                                               
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '3')
	// 	printf("the K now is: %s\n","0.3");                                                                                                                 
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '4')
	// 	printf("the K now is: %s\n","0.4");                                                                                                                 
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '5')
	// 	printf("the K now is: %s\n","0.5");                                                                                                                 
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '6')
	// 	printf("the K now is: %s\n","0.6");                                                                                                                 
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '7')
	// 	printf("the K now is: %s\n","0.7");                                                                                                                 
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '8')
	// 	printf("the K now is: %s\n","0.8");                                                                                                                 
	// else if(usart_read_buffer[0] == 'K' && usart_read_buffer[1] == '=' && usart_read_buffer[2] == '0' && usart_read_buffer[3] =='.' && usart_read_buffer[4] == '9')
	// 	printf("the K now is: %s\n","0.9");
	// else
	// 	printf("error!");
    // // 打印读取缓冲区中的数据
    // //printf("ringbuffer data: %s\n", usart_read_buffer);
    
    // // 清空读取缓冲区
    // memset(usart_read_buffer, 0, sizeof(uint8_t) * BUUFER_SIZE);
    //HAL_UART_Receive_IT(&huart1, &rx_data, 1);
    // rx_state = HAL_UART_Receive(&huart1, rx_data, 10, 1000);
    // if (rx_state == HAL_OK)
    // {
    //     for (int i = 0; i < 10; i++)
    //         printf("DMA data: %c\n", rx_data[i]);
    // }
    // else
    // {
    //     printf("rx_state:%d\n", rx_state);
    // }
}

    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    {
        printf("enter RxCpltCallback\n");
        if(huart->Instance == USART1)
        {
            for(int i=0;i<10;i++)
            printf("uart_data: %c\n", rx_data[i]);
        }
        HAL_UART_Receive_DMA(&huart1, rx_data, 10);
    }

uint16_t uart_count;
uint16_t DMA_count;
// void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
// {
//     printf("enter ExCallback\n");
//     if (huart->Instance == USART1)
//     {
//         for (int i = 0; i < Size; i++)
//             printf("DMA_data: %c\n", rx_data[i]);

//             printf("Size: %d\n", Size);
//         }
//         HAL_UARTEx_ReceiveToIdle_DMA(&huart1, rx_data, 10);
//        // __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT);
//     }

